Java.lang.IllegalStateException: Already attached

2020-03-09 17:14发布

I'm trying to build an app, that pastes an input from a previous activity(works with no problem) and then shows me some things from a database(when ButtonGet is pressed). The problem is that when I try to Run the project, I get Java.lang.IllegalStateException: Already attached. What is wrong with my code?

 package br.exemplozxingintegration;

 import android.annotation.SuppressLint;
 import android.app.ProgressDialog;
 import android.content.ClipData;
 import android.content.ClipboardManager;
 import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.TextView;
 import android.widget.Toast;

 import com.android.volley.RequestQueue;
 import com.android.volley.Response;
 import com.android.volley.VolleyError;
 import com.android.volley.toolbox.StringRequest;
 import com.android.volley.toolbox.Volley;

 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;



 public class SecondActivity extends AppCompatActivity implements View.OnClickListener  {



     private EditText  pastetext;
     private ClipboardManager myClipboard;
     private ClipData myClip;
     private Button btn;
     private EditText textView1;
     private Button buttonGet;
     private TextView textViewResult;

     private ProgressDialog loading;


           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_second);
               myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
               pastetext = (EditText) findViewById(R.id.textView1);
               btn = (Button)findViewById(R.id.buttonPaste);
               btn.performClick();
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);

               textView1 = (EditText) findViewById(R.id.textView1);
               buttonGet = (Button) findViewById(R.id.buttonGet);
               textViewResult = (TextView) findViewById(R.id.textViewResult);

               buttonGet.setOnClickListener(this);

           }



           @SuppressLint("NewApi")
           public void paste(View view) {
               ClipData cp = myClipboard.getPrimaryClip();
               ClipData.Item item = cp.getItemAt(0);
               String text = item.getText().toString();
               pastetext.setText(text);
               Toast.makeText(getApplicationContext(), "Text Pasted",
                       Toast.LENGTH_SHORT).show();


           }


     private void getData() {
         String id = textView1.getText().toString().trim();
         if (id.equals("")) {
             Toast.makeText(this, "", Toast.LENGTH_LONG).show();
             return;
         }
         loading = ProgressDialog.show(this,"Please wait...","Fetching...",false,false);

         String url = Config.DATA_URL+textView1.getText().toString().trim();

         StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
             @Override
             public void onResponse(String response) {
                 loading.dismiss();
                 showJSON(response);
             }
         },
                 new Response.ErrorListener() {
                     @Override
                     public void onErrorResponse(VolleyError error) {
                         Toast.makeText(SecondActivity.this,error.getMessage().toString(),Toast.LENGTH_LONG).show();
                     }
                 });

         RequestQueue requestQueue = Volley.newRequestQueue(this);
         requestQueue.add(stringRequest);
     }

     private void showJSON(String response){
         String name="";
         String image = "";
         try {
             JSONObject jsonObject = new JSONObject(response);
             JSONArray result = jsonObject.getJSONArray(Config.JSON_ARRAY);
             JSONObject collegeData = result.getJSONObject(0);
             name = collegeData.getString(Config.KEY_NAME);
             image = collegeData.getString(Config.KEY_IMAGE);
         } catch (JSONException e) {
             e.printStackTrace();
         }
         textViewResult.setText("Name:\t"+name+"\nImagine :\t"+ image);
     }

     @Override
     public void onClick(View v) {
         getData();
     }
 }

4条回答
混吃等死
2楼-- · 2020-03-09 17:51

Problem is you first initialize textView1, and perform the button click, at that point you are just resetting any previous settings by calling onCreate() again, and before perfomClick methods hits getData() method, inside here also tries to access the text from textView1 but you called onCreate after that and set the view from scratch. That is why you cannot get it work, delete the duplicate code

查看更多
爷、活的狠高调
3楼-- · 2020-03-09 17:57

Please attach logcat message and if possible DB file. This could be the possible problem, You might be reassign the already assigned db object while inserting in the table.

查看更多
\"骚年 ilove
4楼-- · 2020-03-09 18:02

In your onCreate, you're calling super.onCreate() twice, and also setContentView() twice. I'm pretty sure that's not what you want to do.

查看更多
倾城 Initia
5楼-- · 2020-03-09 18:05

If none of the answers here helped - and the Log message makes no sense - I recommend you to File->Invalidate cahce then run the app again and hopefully this time the log will show the correct stack trace.

查看更多
登录 后发表回答