Ответ 1
В вашем onCreate вы вызываете super.onCreate() дважды, а также setContentView() дважды. Я уверен, что не то, что вы хотите сделать.
Я пытаюсь создать приложение, которое вставляет вкладку из предыдущего действия (работает без проблем), а затем показывает мне некоторые вещи из базы данных (при нажатии кнопки 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();
}
}
В вашем onCreate вы вызываете super.onCreate() дважды, а также setContentView() дважды. Я уверен, что не то, что вы хотите сделать.
Проблема заключается в том, что вы сначала инициализируете textView1 и выполняете щелчок на кнопке, в этот момент вы просто перезагружаете любые предыдущие настройки, снова вызывая onCreate(), и до того, как методы perfomClick попадают в метод getData(), внутри также пытается получить доступ к текст из textView1, но вы вызвали onCreate после этого и задали представление с нуля. Вот почему вы не можете заставить его работать, удалите повторяющийся код
Приложите сообщение logcat и, если возможно, файл DB. Это может быть возможной проблемой. Возможно, вы переназначили уже назначенный объект db при вставке в таблицу.
Если ни один из приведенных здесь ответов не помог - а сообщение "Журнал" не имеет смысла - я рекомендую вам File-> Invalidate cahce, а затем снова запустите приложение, и, надеюсь, на этот раз журнал покажет правильную трассировку стека.