java - Android 应用程序在转而使用 java 创建布局后停止工作

标签 java android xml android-cardview

我正在制作一个预测足球比赛获胜者的应用程序。我是android编程新手,所有recyclerview教程都有点令人困惑,但我需要将每个用户预测的所有信息放入cardview中,所以我将所有xml代码转移到java中,但是当我进行此 Activity 时,它说立即关闭虚拟机,但我没有收到任何输入的日志消息。预测中的所有用户数据都位于 SQLite 数据库中,可以读取该数据库以获取信息。下面是我的 java 和 xml 文件,如果可能的话,我希望最终不必使用 xml 文件。

历史 Activity Java 文件:

package com.winansbros.soccerpredictor;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;


public class History extends Activity {

TextView historyTextView;

Context CTX = this;

AdView mAdView;
AdRequest adRequest;

Button clearButton;
Button tipsButton;

StringBuilder sb;
DatabaseOperations DOP;

Integer team1image = 1;
Integer team2image = 1;

AdView adview = new AdView(CTX);
Button clearHistory = new Button(CTX);
Button tips = new Button(CTX);
RelativeLayout mainrl = new RelativeLayout(CTX);

TypedArray imgs = getResources().obtainTypedArray(R.array.images);

public void onCreate(final Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    DOP = new DatabaseOperations(CTX);
    Cursor CR = DOP.getInformation(DOP);
    CR.moveToFirst();

    if( CR != null && CR.moveToFirst() ){

        RelativeLayout.LayoutParams mainrlp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        mainrl.setLayoutParams(mainrlp);

        String adid = getResources().getString(R.string.banner_ad_unit_id);

        RelativeLayout.LayoutParams adviewlayoutparams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        adviewlayoutparams.addRule(RelativeLayout.CENTER_HORIZONTAL);
        adviewlayoutparams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

        RelativeLayout.LayoutParams clearHistoryLP = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        clearHistoryLP.addRule(RelativeLayout.ABOVE, adview.getId());
        clearHistoryLP.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

        RelativeLayout.LayoutParams tipsbuttonlp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        tipsbuttonlp.addRule(RelativeLayout.ABOVE, adview.getId());
        tipsbuttonlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

        adview.setAdSize(AdSize.BANNER);
        adview.setAdUnitId(adid);

        adview.setLayoutParams(adviewlayoutparams);
        clearHistory.setLayoutParams(clearHistoryLP);
        tips.setLayoutParams(tipsbuttonlp);

        clearHistory.setText("Clear History");
        tips.setText("Tips");

        mainrl.addView(adview);
        mainrl.addView(clearHistory);
        mainrl.addView(tips);

        setContentView(mainrl);

        CR.close();

        getHistory();

    } else
    {
        setContentView(R.layout.activity_history);
        clearButton = (Button) findViewById(R.id.clearSQLite);
        tipsButton = (Button) findViewById(R.id.TipsButton);

    }



    mAdView = (AdView) this.findViewById(R.id.adView);
    adRequest = new AdRequest.Builder()
            .addTestDevice("8AC41E108CD62B7703FF28358AEEC8BC")
            .build();
    mAdView.loadAd(adRequest);

    clearButton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            DatabaseOperations DOB = new DatabaseOperations(CTX);
            DOB.DeleteInformation(CTX);
            DOB.close();
            finish();
        }
    });

    //sb = new StringBuilder();

    historyTextView = (TextView) findViewById(R.id.historyText);
    historyTextView.setMovementMethod(new ScrollingMovementMethod());


    tipsButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), TipsActivity.class);
            startActivity(intent);
        }
    });

    DOP.close();
}

public void getHistory() {
    Log.i("GetHistory", "Initialized");

    Cursor CR = DOP.getInformation(DOP);
    CR.moveToFirst();
    List<String> winners = new ArrayList<>();
    List<String> hometeams = new ArrayList<>();
    List<String> awayteams = new ArrayList<>();
    List<String> scores = new ArrayList<>();

    do {
        winners.add(CR.getString(0));
        hometeams.add(CR.getString(1));
        awayteams.add(CR.getString(2));
        scores.add(CR.getString(3));
        Log.d("Cloud Files", "OBJECT ID SET");

    } while (CR.moveToNext());

    Log.d("GetHistory", "Lists all set");

    setImages(hometeams, awayteams);

    Log.d("GetHistory", "Images set");
    int size = winners.size();
    Log.d("Cloud Files", Integer.toString(size));

    for (int i = 0; i < size; i++) {
        Log.d("GetHistory", "Starting For Loop");
        CardView cv = new CardView(CTX);
        RelativeLayout ll = new RelativeLayout(CTX);
        TextView team1name = new TextView(CTX);
        TextView team2name = new TextView(CTX);
        ImageView team1imageview = new ImageView(CTX);
        ImageView team2imageview = new ImageView(CTX);
        TextView cardscore = new TextView(CTX);

        Log.d("GetHistory", "Views set up");

        RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        lp.addRule(RelativeLayout.CENTER_IN_PARENT);

        RelativeLayout.LayoutParams imageview1 = new RelativeLayout.LayoutParams(60, 60);
        imageview1.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        imageview1.addRule(RelativeLayout.ALIGN_PARENT_START);
        imageview1.addRule(RelativeLayout.CENTER_VERTICAL);

        RelativeLayout.LayoutParams imageview2 = new RelativeLayout.LayoutParams(60, 60);
        imageview2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        imageview2.addRule(RelativeLayout.ALIGN_PARENT_END);
        imageview2.addRule(RelativeLayout.CENTER_VERTICAL);

        RelativeLayout.LayoutParams textview1 = new RelativeLayout.LayoutParams(100, RelativeLayout.LayoutParams.WRAP_CONTENT);
        textview1.addRule(RelativeLayout.CENTER_VERTICAL);
        textview1.addRule(RelativeLayout.RIGHT_OF, team1imageview.getId());
        textview1.addRule(RelativeLayout.END_OF, team1imageview.getId());
        textview1.addRule(RelativeLayout.BELOW, team2name.getId());

        RelativeLayout.LayoutParams textview2 = new RelativeLayout.LayoutParams(100, RelativeLayout.LayoutParams.WRAP_CONTENT);
        textview2.addRule(RelativeLayout.CENTER_VERTICAL);
        textview2.addRule(RelativeLayout.LEFT_OF, team2imageview.getId());
        textview2.addRule(RelativeLayout.START_OF, team2imageview.getId());
        textview2.addRule(RelativeLayout.BELOW, team2name.getId());

        RelativeLayout.LayoutParams textview3 = new RelativeLayout.LayoutParams(20, RelativeLayout.LayoutParams.WRAP_CONTENT);
        textview3.addRule(RelativeLayout.CENTER_VERTICAL);
        textview3.addRule(RelativeLayout.RIGHT_OF, team1name.getId());
        textview3.addRule(RelativeLayout.END_OF, team1name.getId());
        textview3.addRule(RelativeLayout.BELOW, team2name.getId());

        Log.d("GetHistory", "Layout params set");

        team1name.setText(hometeams.get(i));
        team2name.setText(awayteams.get(i));
        team1imageview.setImageResource(imgs.getResourceId(team1image, -1));
        cardscore.setText(scores.get(i));
        team2imageview.setImageResource(imgs.getResourceId(team2image, -1));

        team1imageview.setLayoutParams(imageview1);
        team2imageview.setLayoutParams(imageview2);
        team2name.setLayoutParams(textview1);
        team1name.setLayoutParams(textview2);
        cardscore.setLayoutParams(textview3);

        Log.d("GetHistory", "views set to parents");

        mainrl.addView(cv);
        cv.setLayoutParams(lp);
        ll.setLayoutParams(rlp);
        cv.addView(ll);
        ll.addView(team1imageview);
        ll.addView(team1name);
        ll.addView(team2imageview);
        ll.addView(team2name);
        ll.addView(cardscore);

        Log.d("GetHistory", "views set to objects");

        Log.d("GetHistory", "views values set");

        setContentView(mainrl);

        imgs.recycle();

        /**if (appendSeparator) sb.append("\n");
        appendSeparator = true;

        sb.append(hometeams.get(i));
        sb.append(" ");
        sb.append(scores.get(i));
        sb.append(" ");
        sb.append(awayteams.get(i));
        historyTextView.setText(sb.toString());*/
    }

}

public void setImages(List<String> hometeams, List<String> awayteams)
{
    String[] bplteams = new String[20];
    bplteams[0] = "Arsenal";
    bplteams[1] = "Aston Villa";
    bplteams[2] = "Burnley";
    bplteams[3] = "Chelsea";
    bplteams[4] = "Crystal Palace";
    bplteams[5] = "Everton";
    bplteams[6] = "Hull City";
    bplteams[7] = "Leicester City";
    bplteams[8] = "Liverpool";
    bplteams[9] = "Man City";
    bplteams[10] = "Man United";
    bplteams[11] = "Newcastle";
    bplteams[12] = "QPR";
    bplteams[13] = "Southampton";
    bplteams[14] = "Stoke City";
    bplteams[15] = "Sunderland";
    bplteams[16] = "Swansea City";
    bplteams[17] = "Tottenham";
    bplteams[18] = "West Brom";
    bplteams[19] = "West Ham";

    String[] laligateams = new String[20];

    laligateams[0] = "Almería";
    laligateams[1] = "Athletic Bilbao";
    laligateams[2] = "Athlético Madrid";
    laligateams[3] = "Barcalona";
    laligateams[4] = "Celta Vigo";
    laligateams[5] = "Córdoba";
    laligateams[6] = "Deportivo La Coruña";
    laligateams[7] = "Eibar";
    laligateams[8] = "Elche";
    laligateams[9] = "Espanyol";
    laligateams[10] = "Getafe";
    laligateams[11] = "Granada";
    laligateams[12] = "Levante";
    laligateams[13] = "Málaga";
    laligateams[14] = "Rayo Vallecano";
    laligateams[15] = "Real Madrid";
    laligateams[16] = "Real Sociedad";
    laligateams[17] = "Sevilla";
    laligateams[18] = "Valencia";
    laligateams[19] = "Villarreal";

    for (int i = 0; i < hometeams.size(); i++)
    {
        if (hometeams.get(i) == bplteams[i])
        {
            team1image = i;
        } else if (hometeams.get(i) == laligateams[i])
        {
            team1image = i;
        } else if (awayteams.get(i) == bplteams[i])
        {
            team1image = i;
        } else if (awayteams.get(i) == laligateams[i])
        {
            team2image = i;
        }

    }

}
}    

历史 Activity 的 XML 文件:

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
    </com.google.android.gms.ads.AdView>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Clear History"
        android:id="@+id/clearSQLite"
        android:layout_above="@+id/adView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:width="150dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Tips"
        android:id="@+id/TipsButton"
        android:width="150dp"
        android:layout_above="@+id/adView"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>

    <android.support.v7.widget.CardView
        tools:context="com.winansbros.soccerpredictor.History"
        android:id="@+id/card_view"
        android:layout_gravity="center"
        card_view:cardCornerRadius="4dp"
        card_view:cardElevation="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <ImageView
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:id="@+id/team1imageview"
                android:layout_alignParentTop="true"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/team1name"
                android:layout_centerVertical="true"
                android:layout_below="@+id/team2name"
                android:layout_toRightOf="@+id/team1imageview"
                android:layout_toEndOf="@+id/team1imageview"
                android:width="100dp"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/card1score"
                android:width="20dp"
                android:layout_centerVertical="true"
                android:layout_alignTop="@+id/team1name"
                android:layout_toRightOf="@+id/team1name"
                android:layout_toEndOf="@+id/team1name"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/team2name"
                android:width="100dp"
                android:layout_centerVertical="true"
                android:layout_toLeftOf="@+id/team2imageview"
                android:layout_toStartOf="@+id/team2imageview"/>
            <ImageView
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:id="@+id/team2imageview"
                android:layout_centerVertical="true"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"/>

        </RelativeLayout>

    </android.support.v7.widget.CardView>

</RelativeLayout>

有什么建议吗?我还是 Android 开发新手,所以这可能是非常简单的事情。预先感谢您。

最佳答案

仅保留这些声明

AdView adview = new AdView(CTX);
Button clearHistory = new Button(CTX);
Button tips = new Button(CTX);
RelativeLayout mainrl = new RelativeLayout(CTX);

TypedArray imgs = getResources().obtainTypedArray(R.array.images);

并至少在 super.onCreate() 之后移动赋值(和初始化)。

关于java - Android 应用程序在转而使用 java 创建布局后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30821328/

相关文章:

java - 加载 gif 图像直到方法执行

java - 如何在java中的xml文件中写入特殊字符(interpunct)?

java - 错误: "error:cannot resolve symbol ' WebViewClient'

android - 当虚拟键盘出现时,三星 Android 上的 Html 输入失去焦点

java - 如何在单击 Android 中的 Firestore 时删除 ListView 文档?

带点符号的 jQuery 多重选择器?

java - 如何在Android上打开Java程序

java - 从集合中分离 2 列的值?

java - 实数值的二项式系数

android - 每个回收器 View 项目上的 ViewTreeObserver.OnGlobalLayoutListener 自动被动调整 TextView 的大小