2016-02-13 67 views
8

我正在尝试构建一个应用程序,该应用程序粘贴来自先前活动(无问题)的输入,然后向我展示数据库中的某些内容(当ButtonGet被按下时)。问题是,当我尝试运行该项目时,我得到了 Java.lang.IllegalStateException: Already attached。我的代码有什么问题?Java.lang.IllegalStateException:已连接

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(); 
    } 
} 
+1

如果您曾经看到崩溃,请务必在陈述您的问题时在logcat中发布堆栈跟踪。 –

回答

13

在您的onCreate中,您调用了super.onCreate()两次,还调用了两次setContentView()。我很确定那不是你想要做的。

+0

它可能是超级通话。在一个函数中调用setContentView两次是没有意义的,但总体来说是完全合法的。 –

+0

删除super.onCreate后,我得到这个AppCompat不支持当前的主题功能。虽然我的主题是 – user3026270

+0

@ user3026270现在听起来好像你有一个完全不相关的问题,现在可能是它自己的问题。 –

0

问题是您首先初始化textView1并执行按钮单击,此时您只需通过再次调用onCreate()重置以前的任何设置,并且在perfomClick方法碰到getData()方法之前,此处也会尝试访问textView1中的文本,但在此之后您调用了onCreate并从头开始设置视图。这就是为什么你不能得到它的工作,删除重复的代码

+0

现在我得到了,java.lang.NullPointerException – user3026270

0

请附上logcat消息,如果可能的DB文件。 这可能是可能的问题,您可能在重新分配已经分配的db对象,同时插入表中。

+0

这应该是一个真正的评论。 – ig0774

+0

https://docs.google.com/document/d/1h4Ix0cwarGglggKK1HPZ_1syDO6Jk2hy01SW_Zwp7wg/edit?usp=sharing – user3026270

+0

我拿出重复,现在我得到显示java.lang.NullPointerException – user3026270