这是我的代码下面哪个工作完全唯一的问题是没有显示toast消息代码是爆炸我想要显示toast mesage如果状态为0在这一行if(status.equals(“1”)) 显示吐司消息,但代码是爆炸,如果我评论Toast然后代码运行完全帮助我我该怎么办?
public class thirdstep extends Activity {
ListView listCategory;
String status;
String message;
String MenuSelect;
ProgressBar prgLoading;
long Cat_ID;
String Cat_name;
String CategoryAPI;
int IOConnect = 0;
TextView txtAlert;
thirdstepAdapter cla;
static ArrayList<String> Category_ID = new ArrayList<String>();
static ArrayList<String> Category_name = new ArrayList<String>();
static ArrayList<String> Category_image = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.category_list2);
ImageButton btnback = (ImageButton) findViewById(R.id.btnback);
listCategory = (ListView) findViewById(R.id.listCategory2);
prgLoading = (ProgressBar) findViewById(R.id.prgLoading);
txtAlert = (TextView) findViewById(R.id.txtAlert);
cla = new thirdstepAdapter(thirdstep.this);
new getDataTask().execute();
listCategory.setAdapter(cla);
btnback.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0) {
// TODO Auto-generated method stub
finish();
}
});
Intent iGet = getIntent();
Cat_ID = iGet.getLongExtra("category_id", 0);
Cat_name = iGet.getStringExtra("category_name");
Toast.makeText(this, Cat_ID + Cat_name, Toast.LENGTH_SHORT).show();
MenuSelect = Utils.MenuSelect;
listCategory.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
// TODO Auto-generated method stub
Intent iMenuList = new Intent(thirdstep.this,
fourthscreen.class);
iMenuList.putExtra("Cat_ID",Cat_ID);
iMenuList.putExtra("Menuitem", Category_ID.get(position));
startActivity(iMenuList);
}
});
}
void clearData() {
Category_ID.clear();
Category_name.clear();
Category_image.clear();
}
public class getDataTask extends AsyncTask<Void, Void, Void>{
getDataTask(){
if(!prgLoading.isShown()){
prgLoading.setVisibility(0);
txtAlert.setVisibility(8);
}
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
parseJSONData();
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
prgLoading.setVisibility(8);
if((Category_ID.size() > 0) || IOConnect == 0){
listCategory.setVisibility(0);
listCategory.setAdapter(cla);
}else{
txtAlert.setVisibility(0);
}
}
}
public void parseJSONData() {
CategoryAPI = Utils.MenuList + Cat_ID;
clearData();
try {
HttpClient client = new DefaultHttpClient();
HttpConnectionParams
.setConnectionTimeout(client.getParams(), 15000);
HttpConnectionParams.setSoTimeout(client.getParams(), 15000);
HttpUriRequest request = new HttpGet(CategoryAPI);
HttpResponse response = client.execute(request);
InputStream atomInputStream = response.getEntity().getContent();
BufferedReader in = new BufferedReader(new InputStreamReader(
atomInputStream));
String line;
String str = "";
while ((line = in.readLine()) != null) {
str += line;
}
JSONObject json = new JSONObject(str);
JSONObject json2 = new JSONObject(str);
status = json2.getString("status");
message = json2.getString("message");
if (status.equals("1")) {
JSONObject data = json.getJSONObject("data");
JSONArray school = data.getJSONArray("menu_groups");
for (int i = 0; i < school.length(); i++) {
JSONObject object = school.getJSONObject(i);
Category_ID.add(object.getString("id"));
Category_name.add(object.getString("title"));
Category_image.add(object.getString("image"));
}
}
else
{
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
IOConnect = 1;
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
用这个
围绕你的祝酒词runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getBaseContext(), message, Toast.LENGTH_SHORT).show();
}
});
答案 1 :(得分:0)
您的toast消息位于parseJsonData方法中,该方法是从asynctask的doInBackground方法调用的。
您无法从后台线程更新用户界面线程。
这里有两个选择
1)您可以发布传递整数值的线程的进度publishProgress(1)
,以用作您可以在onPublishProgress侦听器中接收并在那里显示您的吐司的标志
或
2)由于你的方法已经完成了这一点,然后让parseJsonData
将整数变量设置为asynctask的全局变量,并在onPostExecute
方法中将某些内容传递回监听器以指示toast需要显示
根据评论进行更新
替换
{
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
与
{
publishProgress(1);
}
将缺少的onProgressUpdate()方法添加到asynctask
@Override
protected void onProgressUpdate(Integer... percent) {
//Call your listeners.onProgressUpdate(percent) here and show the
//Or
super.onProgressUpdate(percent);
if (percent[0] == 1){
Toast.makeText(thirdstep.this, message, Toast.LENGTH_SHORT).show();
}
}
我不是来为你编写代码。做一些关于如何正确编写异步任务和发布进度的研究
这是一个很好的起点 http://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/
你应该知道方向的变化以及它将如何影响你的asynctask(我通过使用片段避免了这个问题
这是我用于异步任务的设计模式 http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
但是对于处理Web服务,对你的用户很好,让android系统在下载数据等时运行,不要耗尽电池并使用带有intentservice而不是asynctask的同步适配器。已经有太多糟糕的应用程序采用asynctask方法来使用Web服务。请不要将您的内容添加到列表中
这样做 http://developer.android.com/training/sync-adapters/creating-sync-adapter.html
这是一个额外的学习曲线,但你的程序员对吗?您应该为用户提供最佳体验。
顺便说一句你因为要求为你编写代码而得到投票。我希望这只是语言障碍而不是态度问题。