Java.lang.IllegalStateException:已附加
Posted
技术标签:
【中文标题】Java.lang.IllegalStateException:已附加【英文标题】:Java.lang.IllegalStateException: Already attached 【发布时间】:2016-05-24 22:02:17 【问题描述】:我正在尝试构建一个应用程序,它粘贴以前活动的输入(没有问题),然后向我显示数据库中的一些内容(按下 ButtonGet 时)。问题是当我尝试运行项目时,我得到
Java.lang.IllegalStateException: Already attached
。我的代码有什么问题?
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();
【问题讨论】:
如果您遇到崩溃,请务必在说明您的问题时在 logcat 中发布堆栈跟踪。 【参考方案1】:在您的 onCreate 中,您调用了 super.onCreate() 两次,并且还调用了两次 setContentView()。我很确定这不是你想要做的。
【讨论】:
这可能是超级电话。在单个函数中调用 setContentView 两次是没有意义的,但总体上是完全合法的。 删除 super.onCreate 后,我得到这个 AppCompat 不支持当前的主题功能。虽然我已经安装了主题 @user3026270 现在听起来你有一个完全不相关的问题,现在可能是它自己的问题。 @user3026270 如果您认为此答案有帮助,请接受它作为正确答案并在另一个问题中跟进不同的问题。 谢谢,我的代码在多个实例中定义了 super.onCreate 方法,您的解决方案解决了我的问题【参考方案2】:问题是您首先初始化 textView1,然后执行按钮单击,此时您只是通过再次调用 onCreate() 重置任何先前的设置,并且在 perfomClick 方法命中 getData() 方法之前,这里也尝试访问textView1 中的文本,但之后您调用了 onCreate 并从头开始设置视图。这就是为什么你不能让它工作,删除重复的代码
【讨论】:
现在我明白了,java.lang.NullPointerException【参考方案3】:请附上 logcat 消息和可能的 DB 文件。 这可能是可能的问题,您可能在插入表时重新分配已分配的数据库对象。
【讨论】:
这应该是个评论。 docs.google.com/document/d/… 我取出了重复的,现在我得到了,java.lang.NullPointerException 它是您调用 DB 类的最终活动代码。如果是你还没有初始化你的数据库,请先初始化它。如果可能,请同时粘贴您错误的第二个活动的 onCreate 方法。 我在不同的类中初始化数据库。你的意思是“也粘贴你错误的第二个活动的 onCreate 方法”。【参考方案4】:如果这里的答案都没有帮助 - 并且日志消息没有意义 - 我建议您使用 File->Invalidate cahce 然后再次运行应用程序,希望这次日志将显示正确的堆栈跟踪。
【讨论】:
以上是关于Java.lang.IllegalStateException:已附加的主要内容,如果未能解决你的问题,请参考以下文章