2017-01-12 5 views
-2

Я создаю простое приложение для Android. Часть у меня возникают проблемы, когда я пытаюсь получить String значение из класса randomFailureQuotes метода, который является важным является следующимошибка при получении данных из другого класса

public String getQuote(String[] quotes, int indexPosition) { 
    String quoteToBeDisplayed = new String(quotes[indexPosition]); 
    return quotes[indexPosition]; 
} 

Я пытаюсь сделать эту метку в TextView с этим кодом в моем EditorActivity класс кода для этого является следующим.

randomFailureQuotes quote = new randomFailureQuotes(); 
    String Fq = quote.getQuote; 
    setContentView(R.layout.activity_editor); 
    TextView quoteDisplay = new TextView(this); 
    quoteDisplay.setText(Fq); 

Ошибка с тем, когда я пытаюсь установить значение строки с именем Fq к значению, что метод getQuote возвращается. IDE говорит он не может найти символ getQuote. Любая помощь будет принята с благодарностью. Не стесняйтесь указывать на любые другие несвязанные ошибки в моем коде, поскольку я новичок в разработке Java и Android и хотел бы узнать.

EDIT в соответствии с просьбой RScotCarson здесь есть остальная часть моего кода из обоих классов randomFailureQuotes

public class randomFailureQuotes { 
    List<String> quotes = new ArrayList<>(); 

    double indexPosition = (Math.random() * 4); 

    protected void onCreate(Bundle savedInstanceState) { 


     quotes.add("Failure Does't mean the game is over, it means try again with Experience"); 
     quotes.add("Failure is an event not a person. Yesterday ended Last night - Zig Ziglar"); 
     quotes.add("We learn from failure not success"); 
     quotes.add("If you're not prepared to be wrong, you'll never come up with anything original - Ken Robinson"); 
     } 

    public String getQuote(String[] quotes, int indexPosition) { 
     String quoteToBeDisplayed = new String(quotes[indexPosition]); 
     return quotes[indexPosition]; 
    } 

} 

EditorActivity

package com.example.slick.thegiftoffailure; 

    import android.os.Bundle; 
    import android.support.design.widget.FloatingActionButton; 
    import android.support.design.widget.Snackbar; 
    import android.support.v7.app.AppCompatActivity; 
    import android.support.v7.widget.Toolbar; 
    import android.view.View; 
    import android.widget.TextView; 

    import java.util.Random; 

    import static android.R.attr.id; 

    public class EditorActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //the toolbar 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      // the quote label 
     randomFailureQuotes quote = new randomFailureQuotes(); 
     String Fq = quote.getQuote(); 
     setContentView(R.layout.activity_editor); 
     TextView quoteDisplay = new TextView(this); 
     quoteDisplay.setText(Fq); 

    } 

} 
+1

Ваш метод 'getQuote' требует параметра, который является' getQuote (String [], int) ' – Baby

+0

@Baby Я не понимаю, что вы пытаетесь сказать, что у меня есть эти аргументы в моем randomFailureQuotes – KidCoder

+0

Да, у вас это есть в вашем определение метода. но вы не включили их, когда вы вызываете ваш метод здесь 'String Fq = quote.getQuote;'. – Baby

ответ

0

Давайте посмотрим на ваше определение GetQuote:

public String getQuote(String[] quotes, int indexPosition) 

Он принимает массив строк, а также позиции, используемой в качестве индекса в массиве. Это означает, что при вызове GetQuote это должно выглядеть примерно так ...

// quotes is an array declared and instantiated previously 
// index is an integer that is also declared and instantiated previously 
String Fq = quote.getQuote(quotes, index) 

Из Вашего вопроса, похоже цитата существует в другом классе. Можете ли вы оставить остальную часть кода из обоих классов?

Если и индекс, и массив кавычек принадлежат классу RandomFailureQuotes как члену, тогда вам не нужно передавать их методу при условии, что они были созданы.

EDIT После OP при условии, что дополнительный код, вопрос в классе randomFailureQuotes есть несколько вопросов.

  • onCreate() НЕ является конструктором. onCreate является частью платформы Android и является частью Activity lifecycle. Стандартный класс Java выглядит следующим образом ...

RandomFailureQuote.java

// It is Java convention to have class names capitalized each word 
public class RandomFailureQuotes { 

    private List<String> quotes = new ArrayList<>(); 

    // The constructor does not need any arguments since you are 
    // generating the quotes yourself. 
    public RandomFailureQuotes() { 
     quotes.add("Failure Does't mean the game is over, it means try again with Experience"); 
     quotes.add("Failure is an event not a person. Yesterday ended Last night - Zig Ziglar"); 
     quotes.add("We learn from failure not success"); 
     quotes.add("If you're not prepared to be wrong, you'll never come  up with anything original - Ken Robinson"); 
    } 

    // Because the index and quotes array are member variables, 
    // you do not need the arguments in the method definition. 
    // Also, to get a random number each time you get a quote 
    // you will need to move the random variable to the method. 
    // you will need to cast the double value of indexPosition to an int     value 
    public String getQuote() { 
     double indexPosition = (Math.random() * 4); 
     String quoteToBeDisplayed = quotes.get((int) indexPosition); 
     return quoteToBeDisplayed; 
    } 
} 

Что касается EditorActivity, есть проблемы там. Я предполагаю, что вы даже не используете панель инструментов, поэтому я собираюсь удалить это из файла Activity и Activity_layout.xml.

EditorActivity.java

package com.example.slick.thegiftoffailure; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.TextView; 

public class EditorActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_editor); 

     // the quote label 
     randomFailureQuotes quote = new randomFailureQuotes(); 
     String Fq = quote.getQuote(); 

     // You must retrieve the textview from your 
     // activity_layout.xml file 
     TextView quoteDisplay = (TextView) findViewById(R.id.text_view); 
     quoteDisplay.setText(Fq); 
    } 
} 

Затем я изменил XML только один TextView, который отображает апостроф отказа. Обратите внимание, что приложение нужно будет перезапустить, чтобы выбрать другую цитату.

activity_editor.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/content_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <TextView 
     android:id="@+id/text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" /> 
</RelativeLayout> 

Наконец, от разработчика, я предлагаю вам потратить некоторое время на изучение Java, прежде чем прыгать в для Android. Есть сложности для обоих, которые занимают немного времени, чтобы учиться. В Интернете есть миллион учебных руководств, которые помогут вам начать работу с обоими. Найдите тот, который вам нравится, и внимательно следите за ним! Удачи!

+1

сообщение было обновлено – KidCoder

+0

Я обновил мои Ответ: – RScottCarson

+0

Очевидно, что quotes.get принимает только не двойные типы данных. Поэтому я отредактировал ваш код, добавив double в int. Спасибо за помощь. – KidCoder

-1

Строка Fq = quote.getQuote;

Это относится к переменной-члену (поле), называемой getQuote. Это нигде не определено.

Метод getQuote() не имеет отношения. Имена переменных и имена методов занимают различные пространства имен.

0

Создается новый объект типа randomFailureQuotes, называемый цитатой. Вы не передали параметры для объекта, а затем попытались напрямую получить доступ к элементу данных getQuote внутри вновь созданного объекта. Если вы хотите использовать функцию getQuote, вам, по крайней мере, нужно будет включить скобки, чтобы она выглядела так: quote.getQuote()

Но помните, что функция getQuote ожидает массив строк с индексом в массиве.

getQuote должен возвращать строку, которая должна быть прекрасной. Он вернет строку, которая хранится в значении индекса внутри массива String. BUt вам нужно убедиться, что вы либо передали в массиве String, либо значение или определили его в конструкторе по умолчанию.

Смежные вопросы