如何解决像java.lang.Throwable这样的错误:setStateLocked?

时间:2016-08-10 05:42:21

标签: java android listview android-activity

我正在开发一款应用。在其中我使用listview。当我点击列表项时,它应该转到下一个活动,即ProfileActivity2.java。它工作正常,但在这个ProfileActivty2底部有一个按钮,当我点击这个按钮时,我的应用程序崩溃并停在listview页面中。并在listview布局文件中显示错误java.lang.Throwable:setStateLocked,即setContentView。我该如何解决这个错误?

//ProfileActivity2.java

    public class ProfileActivity2 extends AppCompatActivity {

        //Textview to show currently logged in user
        private TextView textView;
        private boolean loggedIn = false;
        Button btn;
        EditText edname,edaddress;

        TextView tvsname, tvsprice;
        NumberPicker numberPicker;
        TextView textview1,textview2;
        Integer temp;
        String pname, paddress, email, sname, sprice;


        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_profile1);

            //Initializing textview
            textView = (TextView) findViewById(R.id.textView);
            edname=(EditText)findViewById(R.id.ed_pname);
            edaddress=(EditText)findViewById(R.id.ed_add);
            tvsname=(TextView)findViewById(R.id.textView_name);
            tvsprice=(TextView)findViewById(R.id.textView2_price);
            btn=(Button)findViewById(R.id.button);

            Intent i = getIntent();
            // getting attached intent data
            String name = i.getStringExtra("sname");
            // displaying selected product name
            tvsname.setText(name);

            String price = i.getStringExtra("sprice");
            // displaying selected product name
            tvsprice.setText(price);

            numberPicker = (NumberPicker)findViewById(R.id.numberpicker);

            numberPicker.setMinValue(0);
            numberPicker.setMaxValue(4);
            final int foo = Integer.parseInt(price);
            textview1 = (TextView)findViewById(R.id.textView1_amount);
            textview2 = (TextView)findViewById(R.id.textView_seats);

            //   numberPicker.setValue(foo);

            numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
                @Override
                public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

                    temp = newVal * foo;
                //    textview1.setText("Selected Amount : " + temp);
                //    textview2.setText("Selected Seats : " + newVal);
                      textview1.setText(String.valueOf(temp));
                      textview2.setText(String.valueOf(newVal));
              //      textview1.setText(temp);
               //     textview2.setText(newVal);

                }
            });

            //Fetching email from shared preferences

            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                //    submitForm();
                //    Intent intent = new Intent(ProfileActivity2.this, SpinnerActivity.class);
                //    startActivity(intent);

                  SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
                    loggedIn = sharedPreferences.getBoolean(Config.LOGGEDIN_SHARED_PREF, false);
                    String email = sharedPreferences.getString(Config.EMAIL_SHARED_PREF, "Not Available");
                    textView.setText(email);

                    if(loggedIn){

                        submitForm();

                        Intent intent = new Intent(ProfileActivity2.this, SpinnerActivity.class);
                        startActivity(intent);
                    }
                }
            });

        }

        private void submitForm() {
            // Submit your form here. your form is valid
            //Toast.makeText(this, "Submitting form...", Toast.LENGTH_LONG).show();

            String pname = edname.getText().toString();
            String paddress = edaddress.getText().toString();
            String sname = textview1.getText().toString();
         //    String sname= String.valueOf(textview1.getText().toString());
            String sprice= textview2.getText().toString();
         //   String sprice=  String.valueOf(textview2.getText().toString());
            String email= textView.getText().toString();

            Toast.makeText(this, "Signing up...", Toast.LENGTH_SHORT).show();
            new SignupActivity(this).execute(pname,paddress,sname,sprice,email);

        }
    }

    //SignupActivity

    public class SignupActivity extends AsyncTask<String, Void, String> {

        private Context context;
        Boolean error, success;

        public SignupActivity(Context context) {
            this.context = context;
        }

        protected void onPreExecute() {

        }

        @Override
        protected String doInBackground(String... arg0) {
            String pname = arg0[0];
            String paddress = arg0[1];
            String sname = arg0[2];
            String sprice = arg0[3];
            String email = arg0[4];

            String link;
            String data;
            BufferedReader bufferedReader;
            String result;

            try {
                data = "?pname=" + URLEncoder.encode(pname, "UTF-8");
                data += "&paddress=" + URLEncoder.encode(paddress, "UTF-8");
                data += "&sname=" + URLEncoder.encode(sname, "UTF-8");
                data += "&sprice=" + URLEncoder.encode(sprice, "UTF-8");
                data += "&email=" + URLEncoder.encode(email, "UTF-8");

                link = "http://example.in/Spinner/update.php" + data;

                URL url = new URL(link);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();

                bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                result = bufferedReader.readLine();
                return result;

            } catch (Exception e) {
                // return new String("Exception: " + e.getMessage());
                // return null;
            }

            return null;
        }


        @Override
        protected void onPostExecute(String result) {

            String jsonStr = result;
            Log.e("TAG", jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);
                    String query_result = jsonObj.getString("query_result");
                    if (query_result.equals("SUCCESS")) {
                        Toast.makeText(context, "Success! Your are Now MangoAir User.", Toast.LENGTH_LONG).show();

                    } else if (query_result.equals("FAILURE")) {
                        Toast.makeText(context, "Looks Like you already have Account with US.", Toast.LENGTH_LONG).show();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                    // Toast.makeText(context, "Error parsing JSON Please data Fill all the records.", Toast.LENGTH_SHORT).show();
                    // Toast.makeText(context, "Please LogIn", Toast.LENGTH_SHORT).show();
                    Toast.makeText(context, "Please Login", Toast.LENGTH_LONG).show();

                }
            } else {
                Toast.makeText(context, "Grrr! Check your Internet Connection.", Toast.LENGTH_SHORT).show();
            }
        }

    }


    //List_Search 

    public class List_Search extends AppCompatActivity {

        JSONObject jsonobject;
        JSONArray jsonarray;
        ListView listview;
        ListViewAdapter adapter;
        ProgressDialog mProgressDialog;
        ArrayList<HashMap<String, String>> arraylist;
        static String SNAME = "sname";
        static String SPRICE = "sprice";
        Context ctx = this;


        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.list_search);
            new DownloadJSON().execute();
        }

        // DownloadJSON AsyncTask
        private class DownloadJSON extends AsyncTask<Void, Void, Void> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // Create a progressdialog
                mProgressDialog = new ProgressDialog(List_Search.this);
                // Set progressdialog title
                mProgressDialog.setTitle("Android JSON Parse Tutorial");
                // Set progressdialog message
                mProgressDialog.setMessage("Loading...");
                mProgressDialog.setIndeterminate(false);
                // Show progressdialog
                mProgressDialog.show();
            }

            @Override
            protected Void doInBackground(Void... params) {
                // Create an array
                arraylist = new ArrayList<HashMap<String, String>>();
                // Retrieve JSON Objects from the given URL address
                jsonobject = JSONfunctions
                        .getJSONfromURL("http://example.in/MangoAir_User/mangoair_reg/ListView1.php");

                try {
                    // Locate the array name in JSON
                    jsonarray = jsonobject.getJSONArray("result");

                    for (int i = 0; i < jsonarray.length(); i++) {
                        HashMap<String, String> map = new HashMap<String, String>();
                        jsonobject = jsonarray.getJSONObject(i);
                        // Retrive JSON Objects
                        map.put("sname", jsonobject.getString("sname"));
                        map.put("sprice", jsonobject.getString("sprice"));
                        // Set the JSON Objects into the array
                        arraylist.add(map);
                    }
                } catch (JSONException e) {
                    Log.e("Error", e.getMessage());
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void args) {
                // Locate the listview in listview_main.xml
                listview = (ListView) findViewById(R.id.listView_search);
                // Pass the results into ListViewAdapter.java
              //  adapter = new ListViewAdapter(List_Search.this, arraylist);
                adapter = new ListViewAdapter(ctx, arraylist);
                // Set the adapter to the ListView
                listview.setAdapter(adapter);
                // Close the progressdialog
                mProgressDialog.dismiss();
            }
        }
    }

    //ListViewAdapter


    public class ListViewAdapter extends BaseAdapter {
        // Declare Variables
        Context context;
        LayoutInflater inflater;
        private boolean loggedIn = false;
        ArrayList<HashMap<String, String>> data;

        HashMap<String, String> resultp = new HashMap<String, String>();

        public ListViewAdapter(Context context,
                               ArrayList<HashMap<String, String>> arraylist) {
            this.context = context;
            data = arraylist;

        }

        @Override
        public int getCount() {
            return data.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        public View getView(final int position, View convertView, ViewGroup parent) {
            // Declare Variables
            TextView name,price;
            Button btn;

            inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View itemView = inflater.inflate(R.layout.search_item, parent, false);
            // Get the position
            resultp = data.get(position);

            // Locate the TextViews in listview_item.xml
            name = (TextView) itemView.findViewById(R.id.textView8_sellernm);
            // Capture position and set results to the TextViews
            name.setText(resultp.get(List_Search.SNAME));

            price = (TextView) itemView.findViewById(R.id.textView19_bprice);
            // Capture position and set results to the TextViews
            price.setText(resultp.get(List_Search.SPRICE));


            btn=(Button)itemView.findViewById(R.id.button3_book);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    resultp = data.get(position);
                    Intent intent = new Intent(context, ProfileActivity2.class);
                    // Pass all data rank
                    intent.putExtra("sname", resultp.get(List_Search.SNAME));
                    intent.putExtra("sprice", resultp.get(List_Search.SPRICE));
                    context.startActivity(intent);

                }
            });

            return itemView;
        }
    }

1 个答案:

答案 0 :(得分:3)

context.startActivity(intent);

我认为错误发生在getview块btn.setOnClickListener内的这一行,只需使用startActivity(intent);