Dưới đây là xml của tôi cho mảnh của tôi:đoạn Android thực hiện vấn đề
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.thenewjonathan.foodtracker.fragments.FoodItemDisplay"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="50dp"
android:textStyle="bold"
android:text="blank"
android:id="@+id/foodItemNameView"
android:gravity="center"
android:layout_gravity="top|left|center"
android:textAlignment="center"/>
<ImageView
android:contentDescription="@string/foodPicture"
android:layout_width="241dp"
android:layout_height="241dp"
android:layout_gravity="left|center_vertical"
android:background="@color/material_blue_grey_800"
android:layout_below="@id/foodItemNameView"
android:id="@+id/foodPic"
/>
<RelativeLayout
android:layout_width="140dp"
android:layout_height="241dp"
android:layout_alignParentRight="true"
android:layout_below="@id/foodItemNameView"
android:layout_gravity="end|center_vertical"
android:gravity="center"
android:id="@+id/checkBoxGroup"
>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Monday"
android:id="@+id/mondayBox"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tuesday"
android:id="@+id/tuesdayBox"
android:layout_below="@id/mondayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wednesday"
android:id="@+id/wednesdayBox"
android:layout_below="@id/tuesdayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Thursday"
android:id="@+id/thursdayBox"
android:layout_below="@id/wednesdayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Friday"
android:id="@+id/fridayBox"
android:layout_below="@id/thursdayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Saturday"
android:id="@+id/saturdayBox"
android:layout_below="@id/fridayBox"
android:layout_alignParentStart="true"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sunday"
android:id="@+id/sundayBox"
android:layout_below="@id/saturdayBox"
android:layout_alignParentStart="true"/>
</RelativeLayout>
Dưới đây là file java của tôi cho đoạn: (FoodItem chỉ là một đối tượng tùy chỉnh Tôi đang sử dụng để lưu trữ các thông tin về từng mặt hàng thực phẩm mà các mảnh vỡ đại diện)
package com.thenewjonathan.foodtracker.fragments;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.thenewjonathan.foodtracker.R;
import com.thenewjonathan.foodtracker.enums.GoodBad;
import com.thenewjonathan.foodtracker.objects.FoodItem;
public class FoodItemDisplay extends Fragment
{
private static final String FOOD_ITEM_NAME = "blank";
private FoodItem foodItem;
private String foodItemName;
private ImageView image;
private TextView itemNameView;
private CheckBox mondayBox;
private CheckBox tuesdayBox;
private CheckBox wednesdayBox;
private CheckBox thursdayBox;
private CheckBox fridayBox;
private CheckBox saturdayBox;
private CheckBox sundayBox;
public FoodItemDisplay()
{
setFoodItem(new FoodItem("blank", GoodBad.HEALTHY, "blank"));
}
public static FoodItemDisplay newInstance(String inFoodItemName)
{
FoodItemDisplay fragment = new FoodItemDisplay();
Bundle args = new Bundle();
args.putString(FOOD_ITEM_NAME, inFoodItemName);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (getArguments() != null)
{
foodItemName = getArguments().getString(FOOD_ITEM_NAME);
}
itemNameView = (TextView) itemNameView.findViewById(R.id.foodItemNameView);
image = (ImageView) image.findViewById(R.id.foodPic);
mondayBox = (CheckBox) mondayBox.findViewById(R.id.mondayBox);
tuesdayBox = (CheckBox) tuesdayBox.findViewById(R.id.tuesdayBox);
wednesdayBox = (CheckBox) wednesdayBox.findViewById(R.id.wednesdayBox);
thursdayBox = (CheckBox) thursdayBox.findViewById(R.id.thursdayBox);
fridayBox = (CheckBox) fridayBox.findViewById(R.id.fridayBox);
saturdayBox = (CheckBox) saturdayBox.findViewById(R.id.saturdayBox);
sundayBox = (CheckBox) sundayBox.findViewById(R.id.sundayBox);
if (foodItem != null)
{
setValues();
}
}
public void setValues()
{
if(itemNameView == null)
{
return;
}
itemNameView.setText(foodItem.getName());
image.setImageResource(image.getResources()
.getIdentifier(foodItem.getImgName(), "drawable", this.getClass().getPackage().toString()));
mondayBox.setChecked(foodItem.isMonday());
tuesdayBox.setChecked(foodItem.isTuesday());
wednesdayBox.setChecked(foodItem.isWednesday());
thursdayBox.setChecked(foodItem.isThursday());
fridayBox.setChecked(foodItem.isFriday());
saturdayBox.setChecked(foodItem.isSaturday());
sundayBox.setChecked(foodItem.isSunday());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.food_item_display, container, false);
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
}
@Override
public void onDetach()
{
super.onDetach();
}
public FoodItem getFoodItem()
{
return foodItem;
}
public void setFoodItem(FoodItem foodItem)
{
this.foodItem = foodItem;
}
public String getFoodItemName()
{
return foodItemName;
}
public void setFoodItemName(String foodItemName)
{
this.foodItemName = foodItemName;
}
}
đây là lớp tôi đặt các mảnh vỡ tại chỗ với:
public class HealthyFoods extends Activity
{
private ArrayList<FoodItem> foodItemList;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.healthy_foods);
foodItemList = new ArrayList<FoodItem>();
foodItemList.add(new FoodItem("Turkey Burger", GoodBad.HEALTHY, "burger"));
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
for(FoodItem fi : foodItemList)
{
FoodItemDisplay fid = FoodItemDisplay.newInstance(fi.getName());
fid.setFoodItem(fi);
fid.setValues();
ft.add(R.id.healthyTab, fid);
}
ft.commit();
}
}
Khi tôi chạy nó, tôi nhận được stack trace này:
java.lang.NullPointerException
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:675)
at com.android.ddmlib.HandleHello.sendHELO(HandleHello.java:195)
at com.android.ddmlib.HandleHello.sendHelloCommands(HandleHello.java:66)
at com.android.ddmlib.Client.getJdwpPacket(Client.java:772)
at com.android.ddmlib.MonitorThread.processClientActivity(MonitorThread.java:317)
at com.android.ddmlib.MonitorThread.run(MonitorThread.java:263)
tôi đang làm ok về dự án này bởi vì tôi có thể nhìn thấy dấu vết ngăn xếp vào mã tôi đã viết và tìm lỗi. Nhưng khi tôi nhấn cái này, nó cho tôi đống dấu vết mã mà tôi không viết. Tôi biết rằng điều này cho thấy rằng tôi đã thiết lập sai điều gì đó, nhưng Google không thực sự hữu ích với điều này và tôi đã từng đọc mã này nhiều lần và không thấy bất cứ điều gì sai dựa trên tài liệu cho từng đối tượng và lớp học tôi đang sử dụng ... Có ai từng từng gặp phải điều này trước đây không? Có lẽ có một số ý tưởng về những gì để xem xét? Hoặc chỉ cần thẳng lên có một câu trả lời? lol. Tôi đang sử dụng ý tưởng intellij (không phải studio android).
Cảm ơn! Jon
* TỪ NHẬN XÉT DƯỚI * Dưới đây là các dữ liệu ghi nhận adb:
DeviceMonitor: Adb rejected connection to client '27925': closed
DeviceMonitor: Adb rejected connection to client '27952': closed
DeviceMonitor: Adb rejected connection to client '28560': closed
DeviceMonitor: Adb rejected connection to client '31166': closed
DeviceMonitor: Adb rejected connection to client '31790': closed
DeviceMonitor: Adb rejected connection to client '32138': closed
DeviceMonitor: Adb rejected connection to client '578': closed
DeviceMonitor: Adb rejected connection to client '578': closed
ddms: null
java.lang.NullPointerException
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:675)
at com.android.ddmlib.HandleHello.sendHELO(HandleHello.java:195)
at com.android.ddmlib.HandleHello.sendHelloCommands(HandleHello.java:66)
at com.android.ddmlib.Client.getJdwpPacket(Client.java:772)
at com.android.ddmlib.MonitorThread.processClientActivity(MonitorThread.java:317)
at com.android.ddmlib.MonitorThread.run(MonitorThread.java:263)
ddms: null
java.lang.NullPointerException
at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
at com.android.ddmlib.Client.sendAndConsume(Client.java:675)
at com.android.ddmlib.HandleHello.sendHELO(HandleHello.java:195)
at com.android.ddmlib.HandleHello.sendHelloCommands(HandleHello.java:66)
at com.android.ddmlib.Client.getJdwpPacket(Client.java:772)
at com.android.ddmlib.MonitorThread.processClientActivity(MonitorThread.java:317)
at com.android.ddmlib.MonitorThread.run(MonitorThread.java:263)
DeviceMonitor: Adb rejected connection to client '832': closed
DeviceMonitor: Adb rejected connection to client '3083': closed
DeviceMonitor: Adb rejected connection to client '5816': closed
DeviceMonitor: Adb rejected connection to client '5847': closed
DeviceMonitor: Adb rejected connection to client '6144': closed
PropertyFetcher: AdbCommandRejectedException getting properties for device LGUS990611b931f: device offline
PropertyFetcher: AdbCommandRejectedException getting properties for device LGUS990611b931f: device unauthorized. Please check the confirmation dialog on your device.
PropertyFetcher: AdbCommandRejectedException getting properties for device LGUS990611b931f: device unauthorized. Please check the confirmation dialog on your device.
PropertyFetcher: AdbCommandRejectedException getting properties for device LGUS990611b931f: device unauthorized. Please check the confirmation dialog on your device.
lỗi mới bây giờ sau khi một số cấu hình lại: Ok ... lỗi mới bây giờ ->
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f09005a (com.thenewjonathan.foodtracker:id/healthyTab) for fragment FoodItemDisplay{b5abff #0 id=0x7f09005a}
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:886)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.app.BackStackRecord.run(BackStackRecord.java:833)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)
at android.app.Activity.performStart(Activity.java:6035)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.startActivityNow(ActivityThread.java:2128)
at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:756)
at android.widget.TabHost.setCurrentTab(TabHost.java:420)
at android.widget.TabHost.addTab(TabHost.java:247)
at com.thenewjonathan.foodtracker.MainMenu.onCreate(MainMenu.java:30)
at android.app.Activity.performCreate(Activity.java:6020)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2259)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)
at android.app.ActivityThread.access$800(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
Và nó đang xảy ra trong quá trình tạo menu chính của tôi, đó là thêm các tab khi tôi cố gắng thêm tab "khỏe mạnh" vào tabhost:
public class MainMenu extends ActivityGroup
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main_menu);
TabHost container = (TabHost) findViewById(R.id.mainTabHost);
container.setup(this.getLocalActivityManager());
TabSpec healthy = container.newTabSpec("Healthy Foods").setContent(new Intent(this, HealthyFoods.class))
.setIndicator("Healthy Foods");
TabSpec unHealthy = container.newTabSpec("Unhealthy Foods").setContent(new Intent(this, UnHealthyFoods.class))
.setIndicator("Unhealthy Foods");
container.addTab(healthy);
container.addTab(unHealthy);
}
}
Tôi nghĩ rằng bạn đang bỏ lỡ một vài dòng trong logcat đó, hãy thêm các lỗi đầy đủ. –
^Cuối cùng logcat sẽ cung cấp cho bạn dòng từ * mã của bạn * gây ra lỗi, ngay cả khi nó xảy ra ở đâu đó trong thư viện mà bạn đã nhập (trông như thế này). – AdamMc331
Nhìn vào cách bạn đang nhận được một tham chiếu đến các quan điểm. 'itemNameView = (TextView) itemNameView ...' sẽ ném một NPE, bởi vì itemNameView không bao giờ được khởi tạo. – AdamMc331