2013-05-07 3 views
0

вот код приложения, mainactivity() состоит из события buttonClick() onClick(), которое зарегистрировано в файле xml() макета! , ничего не происходит, если кнопка нажата, и ничего не работает в run(), но как только я положил что-то, запустите() и нажмите кнопку, в которой приложение умирает?app failing on buttonClick()

Я стараюсь иметь тему!

public void buttonClick(View view) 
    { 

      Runnable runnable = new Runnable() { 
       public void run() {   
        //Toast.makeText(getApplicationContext(), "hehe",Toast.LENGTH_LONG).show(); 
        chikki(); 
       } 
      }; 
    Thread mythread = new Thread(runnable); 
     mythread.start(); 
    } 

ссылка LogCat >>http://winacro.com/AndroidLOGCAT/crasher.txt

Вот код вида деятельности:

package com.example.elecimp; 
import java.util.HashMap; 

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

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 


public class MainActivity extends Activity { 

    private static String url = "http://api.androidhive.info/contacts/"; 
    private static final String TAG_CONTACTS = "contacts"; 
    private static final String TAG_ID = "id"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_EMAIL = "email"; 
    private static final String TAG_ADDRESS = "address"; 
    private static final String TAG_GENDER = "gender"; 
    private static final String TAG_PHONE = "phone"; 
    private static final String TAG_PHONE_MOBILE = "mobile"; 
    private static final String TAG_PHONE_HOME = "home"; 
    private static final String TAG_PHONE_OFFICE = "office"; 

    // JSON Node names 
    private static EditText jsonView; 
    private static Button but1; 
    private static Thread th; 
    // contacts JSONArray 
    JSONArray contacts = null; 
    private String strJSONValue = "{\"information\":[ {\"sub1_attr\":\"sub1_attr_value\" },{\"sub1_attr\":\"sub2_attr_value\" }]}}}"; 
    private JSONObject jsonObject; 

    String strParsedValue = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     jsonView = (EditText) findViewById (R.id.editText1); 
     } 

    public void buttonClick(View view) 
    { 

      Runnable runnable = new Runnable() { 
       public void run() {   
        //Toast.makeText(getApplicationContext(), "hehe",Toast.LENGTH_LONG).show(); 
        chikki(); 
       } 
      }; 
    Thread mythread = new Thread(runnable); 
     mythread.start(); 
    } 

    public void chikki() { 
     Toast.makeText(getApplicationContext(), "hehe",Toast.LENGTH_LONG).show(); 
    } 

    public void parseJSON() { 
    // Creating JSON Parser instance 
    JSONParser jParser = new JSONParser(); 

    // getting JSON string from URL 
    JSONObject json = jParser.getJSONFromUrl(url); 

    try { 
     // Getting Array of Contacts 
     contacts = json.getJSONArray(TAG_CONTACTS); 

     // looping through All Contacts 
     for(int i = 0; i < contacts.length(); i++){ 
      JSONObject c = contacts.getJSONObject(i); 

      // Storing each json item in variable 
      String id = c.getString(TAG_ID); 
      String name = c.getString(TAG_NAME); 
      String email = c.getString(TAG_EMAIL); 
      String address = c.getString(TAG_ADDRESS); 
      String gender = c.getString(TAG_GENDER); 

      // Phone number is agin JSON Object 
      JSONObject phone = c.getJSONObject(TAG_PHONE); 
      String mobile = phone.getString(TAG_PHONE_MOBILE); 
      String home = phone.getString(TAG_PHONE_HOME); 
      String office = phone.getString(TAG_PHONE_OFFICE); 

      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 

      // adding each child node to HashMap key => value 
      map.put(TAG_ID, id); 
      map.put(TAG_NAME, name); 
      map.put(TAG_EMAIL, email); 
      map.put(TAG_PHONE_MOBILE, mobile); 

      // adding HashList to ArrayList 
      //contactList.add(map); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    }} 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 
+0

Опубликуйте свой выходной сигнал logcat. – Cornholio

+0

Можете ли вы разместить вывод logcat? –

+0

Событие 'onClick' должно быть в вашем макете, а не в файле манифеста. Вероятно, поэтому кнопка не реагирует. –

ответ

0

Вы пытаетесь сделать что-то с UI (EG-Показав Тост) в потоке? Если да, то ваше приложение не будет работать. Если вы хотите сделать что-то пользовательский интерфейс, связанный вам придется использовать

runonuithread

Выполняет указанное действие в потоке пользовательского интерфейса. Если текущий поток является потоком пользовательского интерфейса, то действие выполняется немедленно. Если текущий поток не является потоком пользовательского интерфейса, действие отправляется в очередь событий потока пользовательского интерфейса.

ИЛИ

AsyncTask

Редактировать

Вы должны изменить этот

public void buttonClick(View view) 
{ 

     Runnable runnable = new Runnable() { 
      public void run() {   
       //Toast.makeText(getApplicationContext(), "hehe",Toast.LENGTH_LONG).show(); 
       chikki(); 
      } 
     }; 
    Thread mythread = new Thread(runnable); 
    mythread.start(); 
} 

этому

public void buttonClick(View view) 
{ 
    Thread mythread = new Thread("Thread1") { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       public void run() { 
        chikki(); 
       } 
      }); 

     } 
    }; 
    mythread .start(); 
} 
+0

Я создал новую тему, вы имеете в виду, что новый поток находится в одном и том же потоке пользовательского интерфейса, поэтому поток на потоке запускается? – Naaz

+0

не получил u buddy .. – bakriOnFire

+3

Новая тема по определению не может быть «на одном и том же потоке пользовательского интерфейса». Неважно, где вы создавали новый поток, это новый объект, а не тот же объект, что и поток пользовательского интерфейса (который ОС создает для вас). Вы не можете прикасаться к материалам пользовательского интерфейса из ничего, кроме потока пользовательского интерфейса. – Krylez