Не могу назвать второе действие в Android

1

В моем первом действии у меня есть три Spinner и три EditText и мне нужно передать выбранные данные во вторую активность и проанализировать их на json-объект. У меня возникла проблема при вызове второго действия. благодаря

Первая активность

public class AndroidspinnerActivity extends Activity
{
    private ArrayList<Country> countryList;
    EditText subjname, slperiod, sldate;
    Spinner deptsp, degreesp, yearsp;
    DatePicker datepicker;

    void showToast(CharSequence msg)
    {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String url = "http://10.0.2.2:8080/SpinnerJson/CountryServlet";
        grabURL(url);
    }

    public void grabURL(String url)
    {
        Log.v("Android Spinner JSON Data Activity", url);
        new GrabURL().execute(url);
    }

    private void displayCountries(String response)
    {
        JSONObject responseObj = null;
        try
        {
            Gson gson = new Gson();
            responseObj = new JSONObject(response);
            JSONArray countryListObj = responseObj.getJSONArray("countryList");

            countryList = new ArrayList<Country>();
            String[] dept_array = new String[countryListObj.length()];
            String[] degree_array = new String[countryListObj.length()];
            String[] year_array = new String[countryListObj.length()];

            for (int i = 0; i < countryListObj.length(); i++)
            {
                // add to country names array
                dept_array[i] = countryListObj.getJSONObject(i).getString("deptname");
                degree_array[i] = countryListObj.getJSONObject(i).getString("degree");
                year_array[i] = countryListObj.getJSONObject(i).getString("year");
                // get the country information JSON object
                String countryInfo = countryListObj.getJSONObject(i).toString();
                // create java object from the JSON object
                Country country = gson.fromJson(countryInfo, Country.class);
                // add to country array list
                countryList.add(country);

            }
            deptsp = (Spinner) findViewById(R.id.Spinner01);
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, dept_array);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            deptsp.setAdapter(adapter);
            deptsp.setOnItemSelectedListener(new OnItemSelectedListener()
            {
                public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
                {}
                public void onNothingSelected(AdapterView<?> parent)
                {}
            });

            degreesp = (Spinner) findViewById(R.id.Spinner02);
            ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, degree_array);
            adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            degreesp.setAdapter(adapter1);
            degreesp.setOnItemSelectedListener(new OnItemSelectedListener()
            {
                public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
                {}
                public void onNothingSelected(AdapterView<?> parent)
                {}
            });

            yearsp = (Spinner) findViewById(R.id.Spinner03);
            ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, year_array);
            adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            yearsp.setAdapter(adapter2);
            yearsp.setOnItemSelectedListener(new OnItemSelectedListener()
            {
                public void onItemSelected(AdapterView<?> parent, View view, int pos, long id)
                {}
                public void onNothingSelected(AdapterView<?> parent)
                {}

            });

            Button contbtn = (Button) findViewById(R.id.btn_continue);
            contbtn.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View v)
                {

//                  String sldeptdp = deptsp.getSelectedItem().toString();
//                  String sldegreedp = degreesp.getSelectedItem().toString();
//                  String slyeardp = yearsp.getSelectedItem().toString();
//                  String subjnamee = subjname.getText().toString();
//                  String sldatee = sldate.getText().toString();
//                  String slperiodd = slperiod.getText().toString();
//                  JSONObject jsonobject;
//                  jsonobject = new JSONObject();
//                  try
//                  {
//                      jsonobject.put(sldeptdp, "");
//                      jsonobject.put(sldegreedp, "");
//                      jsonobject.put(slyeardp, "");
//                      jsonobject.put(subjnamee, "");
//                      jsonobject.put(sldatee, "");
//                      jsonobject.put(slperiodd, "");
//                      showToast((jsonobject.toString(2)));
//                  }
//                  catch (JSONException ex)
//                  {}

                    onclickgo();
                }
            });
            // subj name
            subjname = (EditText) findViewById(R.id.edit_sub);
            subjname.getText().toString();
            // date
            sldate = (EditText) findViewById(R.id.edit_date);
            sldate.getText().toString();
            slperiod = (EditText) findViewById(R.id.edit_period);
            slperiod.getText().toString();

        }
        catch (JSONException e)
        {
            e.printStackTrace();
        }
        String sldeptdp = deptsp.getSelectedItem().toString();
        String sldegreedp = degreesp.getSelectedItem().toString();
        String slyeardp = yearsp.getSelectedItem().toString();
        String subjnamee = subjname.getText().toString();
        String sldatee = sldate.getText().toString();
        String slperiodd = slperiod.getText().toString();

        Intent intent = new Intent(this, Parshingdata.class);
        intent.putExtra("sldept", sldeptdp);
        intent.putExtra("sldegree", sldegreedp);
        intent.putExtra("slyear", slyeardp);
        intent.putExtra("slsubjname", subjnamee);
        intent.putExtra("sldate", sldatee);
        intent.putExtra("slperiod", slperiodd);
        startActivity(intent);
    }

    protected void onclickgo()
    {
        Intent i = new Intent(this, Parshingdata.class);
        startActivity(i);
    }

    private class GrabURL extends AsyncTask<String, Void, String>
    {
        private static final int REGISTRATION_TIMEOUT = 3 * 1000;
        private static final int WAIT_TIMEOUT = 30 * 1000;
        private final HttpClient httpclient = new DefaultHttpClient();
        final HttpParams params = httpclient.getParams();
        HttpResponse response;
        private String content = null;
        private boolean error = false;
        private ProgressDialog dialog = new ProgressDialog(AndroidspinnerActivity.this);

        protected void onPreExecute()
        {
            dialog.setMessage("Getting your data... Please wait...");
            dialog.show();
        }

        protected String doInBackground(String... urls)
        {
            String URL = null;
            try
            {
                URL = urls[0];
                HttpConnectionParams.setConnectionTimeout(params, REGISTRATION_TIMEOUT);
                HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);
                ConnManagerParams.setTimeout(params, WAIT_TIMEOUT);

                HttpPost httpPost = new HttpPost(URL);

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
                nameValuePairs.add(new BasicNameValuePair("fakeInput", "not in USE for this demo"));
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                response = httpclient.execute(httpPost);

                StatusLine statusLine = response.getStatusLine();
                if (statusLine.getStatusCode() == HttpStatus.SC_OK)
                {
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                    response.getEntity().writeTo(out);
                    out.close();
                    content = out.toString();
                }
                else
                {
                    // Closes the connection.
                    Log.w("HTTP1:", statusLine.getReasonPhrase());
                    response.getEntity().getContent().close();
                    throw new IOException(statusLine.getReasonPhrase());
                }
            }
            catch (ClientProtocolException e)
            {
                Log.w("HTTP2:", e);
                content = e.getMessage();
                error = true;
                cancel(true);
            }
            catch (IOException e)
            {
                Log.w("HTTP3:", e);
                content = e.getMessage();
                error = true;
                cancel(true);
            }
            catch (Exception e)
            {
                Log.w("HTTP4:", e);
                content = e.getMessage();
                error = true;
                cancel(true);
            }

            return content;
        }

        protected void onCancelled()
        {
            dialog.dismiss();
            Toast toast = Toast.makeText(AndroidspinnerActivity.this, "Error connecting to Server", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.TOP, 25, 400);
            toast.show();
        }

        protected void onPostExecute(String content)
        {
            dialog.dismiss();
            Toast toast;
            if (error)
            {
                toast = Toast.makeText(AndroidspinnerActivity.this, content, Toast.LENGTH_LONG);
                toast.setGravity(Gravity.TOP, 25, 400);
                toast.show();
            }
            else
            {
                displayCountries(content);
            }
        }

    }
}

Вторая активность

public class Parshingdata extends Activity
{

    void showToast(CharSequence msg)
    {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.takeattnd);

        String sldept = getIntent().getExtras().getString("sldept");
        String sldegree = getIntent().getExtras().getString("sldegree");
        String slyear = getIntent().getExtras().getString("slyear");
        String slsubjname = getIntent().getExtras().getString("slsubjname");
        String slperiod = getIntent().getExtras().getString("slperiod");
        String sldate = getIntent().getExtras().getString("sldate");
        JSONObject jsonobject = new JSONObject();
        try
        {
            jsonobject.put(sldept, "");
            jsonobject.put(sldegree, "");
            jsonobject.put(slyear, "");
            jsonobject.put(slsubjname, "");
            jsonobject.put(sldate, "");
            jsonobject.put(slperiod, "");
            showToast((jsonobject.toString(2)));
        }
        catch (JSONException ex)
        {

        }
    }
}

LOG показать принудительно закрыть в эмуляторе

05-16 19:19:35.354: E/AndroidRuntime(1015): FATAL EXCEPTION: main 
05-16 19:19:35.354: E/AndroidRuntime(1015): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ela.spinner/com.ela.spinner.Parshingdata}: java.lang.NullPointerException 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.os.Looper.loop(Looper.java:137) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at java.lang.reflect.Method.invokeNative(Native Method) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at java.lang.reflect.Method.invoke(Method.java:511) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at dalvik.system.NativeStart.main(Native Method) 
05-16 19:19:35.354: E/AndroidRuntime(1015): Caused by: java.lang.NullPointerException 
05-16 19:19:35.354: E/AndroidRuntime(1015): at com.ela.spinner.Parshingdata.onCreate(Parshingdata.java:24) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.app.Activity.performCreate(Activity.java:4465) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
05-16 19:19:35.354: E/AndroidRuntime(1015): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
05-16 19:19:35.354: E/AndroidRuntime(1015): ... 11 more 05-16 19:19:35.984: D/dalvikvm(1015): GC_CONCURRENT freed 301K, 5% free 9491K/9927K, paused 12ms+94ms
  • 0
    Может быть, было бы полезно, если бы вы могли опубликовать Logcat.
  • 0
    Какая проблема? Post LogCat
Показать ещё 7 комментариев
Теги:
android-intent

4 ответа

0

@Chintan Raghwani был на правильном пути, считая, что проблема действительно коренится в onclickgo() класса AndroidspinnerActivity.

Если вы вызовете этот метод, никакие дополнительные функции не будут установлены для намерения, и поэтому, когда вы вызываете getIntent().getExtras().getString("sldept"); он бросает NPE.

На самом деле getIntent().getExtras() имеет значение null (у вас нет никаких дополнительных настроек!), И вы все равно пытаетесь получить из него строку.

Чтобы обойти эту проблему,

  • либо передайте дополнения в цель класса Parshingdata начиная с onclickgo:

Таким образом, метод onclickgo() должен быть:

protected void onclickgo()
{
    String sldeptdp = deptsp.getSelectedItem().toString();
    String sldegreedp = degreesp.getSelectedItem().toString();
    String slyeardp = yearsp.getSelectedItem().toString();
    String subjnamee = subjname.getText().toString();
    String sldatee = sldate.getText().toString();
    String slperiodd = slperiod.getText().toString();

    Intent intent = new Intent(this, Parshingdata.class);
    intent.putExtra("sldept", sldeptdp);
    intent.putExtra("sldegree", sldegreedp);
    intent.putExtra("slyear", slyeardp);
    intent.putExtra("slsubjname", subjnamee);
    intent.putExtra("sldate", sldatee);
    intent.putExtra("slperiod", slperiodd);
    startActivity(intent);
    startActivity(intent);
}
  • или проверить намерение из метода Parshingdata onCreate для дополнительных onCreate и выполнять действия только в том случае, если доступны дополнительные функции.

Метод onCreate будет выглядеть так:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.takeattnd);

    if (getIntent().hasExtra("sldept"))
    {
        String sldept = getIntent().getExtras().getString("sldept");
        String sldegree = getIntent().getExtras().getString("sldegree");
        String slyear = getIntent().getExtras().getString("slyear");
        String slsubjname = getIntent().getExtras().getString("slsubjname");
        String slperiod = getIntent().getExtras().getString("slperiod");
        String sldate = getIntent().getExtras().getString("sldate");
        JSONObject jsonobject = new JSONObject();
        try
        {
            jsonobject.put(sldept, "");
            jsonobject.put(sldegree, "");
            jsonobject.put(slyear, "");
            jsonobject.put(slsubjname, "");
            jsonobject.put(sldate, "");
            jsonobject.put(slperiod, "");
            showToast((jsonobject.toString(2)));
        }
        catch (JSONException ex)
        {
            Log.e("Error", "Error occured while populating the jsonobject", ex);
        }
    }
}

В лучшем случае вы должны реализовать оба.

  • 0
    Когда я запускаю действие, первое действие отображает экран, но оно автоматически переходит ко второму экрану действий и отображает данные json со значением по умолчанию от spinners. Когда выбираете детали и нажимаете кнопку thr, приложение принудительно закрывается.
  • 0
    это то, что я описывал выше: ваш метод onclickgo не передает никаких дополнительных данных в намерение, он просто запускает новое действие, поэтому в Parshingdata вы получаете Parshingdata NullPointerException при попытке получить дополнительные значения. Теперь я добавил пример того, как должен выглядеть метод onclickgo . Пожалуйста, посмотрите мое обновление и найдите реализацию этого метода.
Показать ещё 2 комментария
0

Проверьте эти значения, вы не получаете одно значение от намерения.

   String sldept = getIntent().getExtras().getString("sldept");
   String sldegree = getIntent().getExtras().getString("sldegree");
   String slyear = getIntent().getExtras().getString("slyear");
   String slsubjname = getIntent().getExtras().getString("slsubjname");
   String slperiod = getIntent().getExtras().getString("slperiod");
   String  sldate = getIntent().getExtras().getString("sldate");

Причина: java.lang.NullPointerException 05-16 19: 19: 35.354: E/AndroidRuntime (1015): at> com.ela.spinner.Parshingdata.onCreate(Parshingdata.java:24)

Здесь происходит ошибка, поэтому это означает, что значение этой переменной равно null, и это sldate, я думаю, что вы получаете от aim.putExtra(). Поэтому проверьте активность, исходя из того, где вы называете это действие. Возможно, вы помещаете что-то неправильно в aim.putExtra(), регатируя этот varibale "sldate" или "slpeiod".

  • 0
    я уже звонил только так ...
  • 0
    спасибо, я плохо проверил
0

попробуйте выполнить код с небольшим изменением

protected void onclickgo() {
    Intent i = new Intent(AndroidspinnerActivity.this, Parshingdata.class);
    startActivity(i);
}

В событии click контекст не остается в вашей активности, поэтому вам нужно указать YourActivityName.this во время Intent.

  • 0
    спасибо .. но я все еще получаю ту же ошибку.
  • 0
    Я прочитал ваш обновленный журнал.
Показать ещё 17 комментариев
0

Вы не ставите цели с намерением. Поэтому, когда вы звоните

String sldept = getIntent().getExtras().getString("sldept");

Это не возвращает ничего, чтобы вставить вам объект json. Итак, вы не можете сделать тост.

  • 0
    если это так, то это приведет к JSONException("Names must be non-null") , которое перехватывается без какой-либо записи в журнале, но приложение будет работать дальше с пустым JSONObject .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню