gpt4 book ai didi

java - 对象未锁定

转载 作者:行者123 更新时间:2023-12-01 09:16:47 30 4
gpt4 key购买 nike

您好,每次出现一些新信息时,我都会尝试更改我的 ExpandableList ,为此我认为清除()然后将其放回原处会更容易,问题是它崩溃了。我对此了解不够,无法弄清楚。

编辑:好的,我知道问题来自 onActivityResult(),但如何修复它?

主要 Activity

// Main Activity

package com.thehuntestshadow.laken;

import android.app.Activity;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import android.content.Intent;
import android.widget.ImageButton;
import android.view.View.OnClickListener;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class MainActivity extends AppCompatActivity{
MyDBHandler dbHandler =new MyDBHandler(this,null,null,1);
MyDBManager dbManager = new MyDBManager(this,null,null,1);
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

expListView = (ExpandableListView) findViewById(R.id.lvExp) ;

prepareListData();

listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

// setting list adapter
expListView.setAdapter(listAdapter);



String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday","Friday", "Saturday", "Sunday"};



expListView.setOnGroupClickListener(new OnGroupClickListener() {

@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
// Toast.makeText(getApplicationContext(),
// "Group Clicked " + listDataHeader.get(groupPosition),
// Toast.LENGTH_SHORT).show();
return false;
}
});

// Listview Group expanded listener
expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

@Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(getApplicationContext(),
listDataHeader.get(groupPosition) + " Expanded",
Toast.LENGTH_SHORT).show();
}
});

// Listview Group collasped listener
expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

@Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(getApplicationContext(),
listDataHeader.get(groupPosition) + " Collapsed",
Toast.LENGTH_SHORT).show();

}
});

// Listview on child click listener
expListView.setOnChildClickListener(new OnChildClickListener() {

@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
Toast.makeText(
getApplicationContext(),
listDataHeader.get(groupPosition)
+ " : "
+ listDataChild.get(
listDataHeader.get(groupPosition)).get(
childPosition), Toast.LENGTH_SHORT)
.show();
return false;
}
});






}
private void prepareListData() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();

int[] x = new int[10001];
x = dbManager.get_result(1);

// Adding child data
listDataHeader.add("Monday");
listDataHeader.add("Tuesday");
listDataHeader.add("Wednesday");
listDataHeader.add("Thursday");
listDataHeader.add("Friday");
listDataHeader.add("Saturday");
listDataHeader.add("Sunday");

String meow;



// Adding child data
List<String> monday = new ArrayList<String>();

for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);monday.add(meow);}
x = dbManager.get_result(2);
List<String> tuesday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);tuesday.add(meow);}

x = dbManager.get_result(3);
List<String> wednsday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);wednsday.add(meow);}


x = dbManager.get_result(4);
List<String> thursday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);thursday.add(meow);}

x = dbManager.get_result(5);
List<String> friday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);friday.add(meow);}

x = dbManager.get_result(6);
List<String> saturday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);saturday.add(meow);}
x = dbManager.get_result(6);
List<String> sunday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);sunday.add(meow);}

listDataChild.put(listDataHeader.get(0), monday); // Header, Child data
listDataChild.put(listDataHeader.get(1), tuesday);
listDataChild.put(listDataHeader.get(2), wednsday);
listDataChild.put(listDataHeader.get(3),thursday);
listDataChild.put(listDataHeader.get(4),friday);
listDataChild.put(listDataHeader.get(5),saturday);
listDataChild.put(listDataHeader.get(6),sunday);

}



public void OnClick(View view) {
Intent i = new Intent(this, Add_Activity.class);
startActivityForResult(i, 1);
}



private void Renew() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();

int[] x = new int[10001];
x = dbManager.get_result(1);

// Adding child data
listDataHeader.add("Monday");
listDataHeader.add("Tuesday");
listDataHeader.add("Wednesday");
listDataHeader.add("Thursday");
listDataHeader.add("Friday");
listDataHeader.add("Saturday");
listDataHeader.add("Sunday");

String meow;



// Adding child data
List<String> monday = new ArrayList<String>();

for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);monday.add(meow);}
x = dbManager.get_result(2);
List<String> tuesday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);tuesday.add(meow);}

x = dbManager.get_result(3);
List<String> wednsday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);wednsday.add(meow);}


x = dbManager.get_result(4);
List<String> thursday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);thursday.add(meow);}

x = dbManager.get_result(5);
List<String> friday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);friday.add(meow);}

x = dbManager.get_result(6);
List<String> saturday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);saturday.add(meow);}
x = dbManager.get_result(6);
List<String> sunday = new ArrayList<String>();
for (int i =0;i<x[10000];i++)
if(x[i]==1){meow=dbHandler.say_name(i+1);sunday.add(meow);}

listDataChild.put(listDataHeader.get(0), monday); // Header, Child data
listDataChild.put(listDataHeader.get(1), tuesday);
listDataChild.put(listDataHeader.get(2), wednsday);
listDataChild.put(listDataHeader.get(3),thursday);
listDataChild.put(listDataHeader.get(4),friday);
listDataChild.put(listDataHeader.get(5),saturday);
listDataChild.put(listDataHeader.get(6),sunday);

}



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent meow) {

if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){


Data data = new Data ();
data.set_description(meow.getStringExtra("description"));
data.set_activityname(meow.getStringExtra("name"));
dbHandler.addProducts(data);
Days days1 = new Days();
int [] array = new int[7];
array = meow.getIntArrayExtra("array");
days1.set_monday(array[0]);
days1.set_tuesday(array[1]);
days1.set_wednesday(array[2]);
days1.set_thursday(array[3]);
days1.set_friday(array[4]);
days1.set_saturday(array[5]);
days1.set_sunday(array[6]);
dbManager.addActivity(days1);
listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
listAdapter.remove_shit();expListView.notifyAll();

prepareListData();
expListView.notifyAll();

}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}//onActivityResult


}

可扩展列表适配器

package com.thehuntestshadow.laken;

/**
* Created by User1 on 10/23/2016.
*/

import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

public class ExpandableListAdapter extends BaseExpandableListAdapter {

private Context _context;
private List<String> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;

public ExpandableListAdapter(Context context, List<String> listDataHeader,
HashMap<String, List<String>> listChildData) {
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.get(childPosititon);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}

@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {

final String childText = (String) getChild(groupPosition, childPosition);

if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_item, null);
}

TextView txtListChild = (TextView) convertView
.findViewById(R.id.lblListItem);

txtListChild.setText(childText);
return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size();
}



@Override
public Object getGroup(int groupPosition) {
return this._listDataHeader.get(groupPosition);
}

@Override
public int getGroupCount() {
return this._listDataHeader.size();
}

@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String headerTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_group, null);
}

TextView lblListHeader = (TextView) convertView
.findViewById(R.id.lblListHeader);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(headerTitle);

return convertView;
}

@Override
public boolean hasStableIds() {
return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}


public void remove_shit ()
{
_listDataChild.clear();

}


}

事件日志

    11/06 11:24:33: Launching app
$ adb push /Users/TheHuntestShadow/Desktop/Alpha/app/build/outputs/apk/app-debug.apk /data/local/tmp/com.thehuntestshadow.laken
$ adb shell pm install -r "/data/local/tmp/com.thehuntestshadow.laken"
pkg: /data/local/tmp/com.thehuntestshadow.laken
Success


$ adb shell am start -n "com.thehuntestshadow.laken/com.thehuntestshadow.laken.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Client not ready yet..Waiting for process to come online
Connected to process 13316 on device samsung-nexus_10-R32D100YVGD
Waiting for process to come online
Waiting for process to come online
Waiting for process to come online
Application terminated.

日志猫

--------- beginning of crash
11-06 11:32:38.972 13676-13676/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.thehuntestshadow.laken, PID: 13676
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { cmp=com.thehuntestshadow.laken/.MainActivity (has extras) }} to activity {com.thehuntestshadow.laken/com.thehuntestshadow.laken.MainActivity}: java.lang.IllegalMonitorStateException: object not locked by thread before notify()
at android.app.ActivityThread.deliverResults(ActivityThread.java:3574)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
at android.app.ActivityThread.access$1300(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.IllegalMonitorStateException: object not locked by thread before notify()
at java.lang.Object.notifyAll(Native Method)
at com.thehuntestshadow.laken.MainActivity.onActivityResult(MainActivity.java:283)
at android.app.Activity.dispatchActivityResult(Activity.java:6192)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3570)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617) 
at android.app.ActivityThread.access$1300(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
11-06 11:32:38.975 412-772/? W/ActivityManager: Force finishing activity 1 com.thehuntestshadow.laken/.MainActivity
11-06 11:32:39.028 412-15206/? I/OpenGLRenderer: Initialized EGL, version 1.4
11-06 11:32:39.032 412-15206/? D/mali_winsys: new_window_surface returns 0x3000
11-06 11:32:39.063 412-15206/? D/mali_winsys: new_window_surface returns 0x3000
11-06 11:32:39.483 412-433/? W/ActivityManager: Activity pause timeout for ActivityRecord{2aaea51a u0 com.thehuntestshadow.laken/.MainActivity t420 f}
11-06 11:32:39.546 12963-12980/? D/mali_winsys: new_window_surface returns 0x3000
11-06 11:32:40.497 523-523/? W/ResourceType: No package identifier when getting value for resource number 0x00000000
11-06 11:32:40.498 523-523/? W/PackageManager: Failure retrieving resources for com.android.settings: Resource ID #0x0
11-06 11:32:42.486 13676-13676/? I/Process: Sending signal. PID: 13676 SIG: 9
11-06 11:32:42.552 412-821/? I/WindowState: WIN DEATH: Window{1f76342a u0 com.thehuntestshadow.laken/com.thehuntestshadow.laken.Add_Activity}
11-06 11:32:42.558 412-2395/? I/WindowState: WIN DEATH: Window{262b75b3 u0 com.thehuntestshadow.laken/com.thehuntestshadow.laken.MainActivity}
11-06 11:32:42.620 412-425/? I/ActivityManager: Process com.thehuntestshadow.laken (pid 13676) has died
11-06 11:32:47.760 26617-27417/? I/ClearcutLoggerManager: flushAndDisconnect()

最佳答案

更新 _listDataHeader_listDataChild 后,您应该在适配器上调用 notifyDataSetChanged()。这样它就知道重新加载其 View 。

关于java - 对象未锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40493461/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com