相关疑难解决方法(0)

Activity类之外的Android上下文

我正在尝试处理我的应用程序中的异常.我正在尝试记录异常,然后使用Toast提醒用户存在问题.我在我的所有类中都有这个工作查找扩展Activity.

但是,在任何没有扩展活动的类中,我都无法使用toast方法,因为我无法获取当前上下文.有没有一种简单的方法来解决这个问题,还是我的班级应该扩展活动?

android android-context android-activity

13
推荐指数
1
解决办法
1万
查看次数

Java通过方法改变变量的值?

您好我想知道如何将变量作为参数发送到方法并让方法更改它.例如

public class Main {
    public static void main(String[] args) {
        int i = 2;
        doThis(i);
        System.out.println(i);  
    }

    public static void doThis(int i) {
        i = 3;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想打印出3而不是2.谢谢.

java

12
推荐指数
3
解决办法
6万
查看次数

用Java传递参数

我知道Java总是按值传递,但我不明白为什么这样可行:

public static void swap(int[] arr, int i, int j)
{
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}
public static void main(String[] args)
{
    int[] arr = {3, 4, 5, 6};
    swap(arr, 1, 3);
    // arr becomes {3, 6, 5, 4}
}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

public static void swap(int[] arr, int[] arr2)
{
    int[] tmp = arr;
    arr = arr2;
    arr2 = tmp;
}
public static void main(String[] args)
{
   int[] arr = {3, 4, 5, 6};
   int[] …
Run Code Online (Sandbox Code Playgroud)

java pass-by-value

12
推荐指数
2
解决办法
899
查看次数

传值(StringBuilder vs String)

我不明白为什么System.out.println(name)输出Sam而不受方法的concat函数的影响,而System.out.println(names)输出Sam4作为方法的append方法的结果.为什么StringBuilder受影响而不是String?通常,在对对象的引用上调用方法会影响调用者,所以我不明白为什么String结果保持不变.提前致谢

public static String speak(String name) {
    name = name.concat("4");
    return name;
}

public static StringBuilder test(StringBuilder names) {
    names = names.append("4");
    return names; 
}

public static void main(String[] args) {
    String name = "Sam";
    speak(name);
    System.out.println(name); //Sam
    StringBuilder names = new StringBuilder("Sam");
    test(names);
    System.out.println(names); //Sam4
}
Run Code Online (Sandbox Code Playgroud)

java string stringbuilder parameter-passing pass-by-value

12
推荐指数
2
解决办法
4490
查看次数

Java - 方法调用后对象状态不会更改

初学java问题,但我无法理解在下面的例子中,call-by-Value(或Reference)是如何工作的 -

为什么在我的自定义String对象退出方法后,String值不会被修改.?与Date等其他类相同

public class StringMadness {

public static void main(String[] args) {
    String s = "Native String";
    CustomStringObject cs = new CustomStringObject();
    System.out.println("Custom String Before: " + cs.str);
    hello(cs);
    System.out.println("Custom String After: " + cs.str);

    System.out.println("Native String Before: " + s);
    hello(s);
    System.out.println("Native String After: " + s);
}

private static void hello(String t) {
    t = "hello " + t;
}

private static void hello(CustomStringObject o) {
    o.str = "hello " + o.str;
  }
}

class CustomStringObject { …
Run Code Online (Sandbox Code Playgroud)

java pass-by-reference pass-by-value

11
推荐指数
1
解决办法
4万
查看次数

Loaders和onLoaderReset Android

我在我的应用程序中实现了一个Loader来查询数据库中的数据.我通过实现LoaderCallbacks<Cursor>监听器来监听发生的变化.我遇到的问题是当onLoaderReset(Loader<Cursor> loader)我的数据发生变化时使用该方法,并且我想要使与加载器相关的任何数据无效并释放.在所有示例中,在此方法中有以下调用:

mAdapter.swapCursor(null);

但问题是我不使用适配器中光标的数据,我在我的应用程序中以其他方式使用它.

(onLoadFinished(Loader<Cursor> loader, Cursor data)例如,直接从返回的游标中)

        @Override
        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {

            if (data.moveToFirst()) {
                TOTAL_CARDS = data.getCount();
                mView.createCards(TOTAL_CARDS);
            } else {
                TOTAL_CARDS = 0;
                mView.createCards(TOTAL_CARDS);
            }


        }
Run Code Online (Sandbox Code Playgroud)

这里要做的相应事情是什么,与...类似mAdapter.swapCursor.我对装载机没有多少经验,事实上我刚开始与他们合作,所以如果有人有解决方案,我会很感激.谢谢!

编辑:现在,我传递null到加载器,它的工作原理如下:

@Override
public void onLoaderReset(Loader<Cursor> loader) {
        loader = null;
}

};
Run Code Online (Sandbox Code Playgroud)

但这是正确的解决方案吗?

android loader android-loadermanager

11
推荐指数
1
解决办法
1万
查看次数

Java是否通过引用传递?

Java真的支持通过引用传递吗?

如果没有,为什么我们有==运算符来查找具有相同引用的两个对象?

java pass-by-reference

10
推荐指数
3
解决办法
1万
查看次数

Java如何分配指向对象而不是复制?

在课堂上,我有:

private Foo bar;
public Constructor(Foo bar)
{
    this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)

而不是从参数中提供的对象创建bar的副本,是否可以在构造函数中包含指向bar的指针,以便更改原始栏会更改此对象中的字段?

另一种方式:

int x = 7;
int y = x;
x = 9;
System.out.print(y); //Prints 7.
Run Code Online (Sandbox Code Playgroud)

可以将其设置为打印y打印9而不是7?

java reference

10
推荐指数
2
解决办法
2万
查看次数

如何在Java中使用引用?

我想在Java中使用引用,但我不知道如何!例如在C++中我们写道:

void sum(int& x)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但在Java和sign中是一个编译器错误!请帮我理解Java中的参考资料.

java reference pass-by-reference

10
推荐指数
3
解决办法
5万
查看次数

Kotlin - 如何为外部类创建字段只读

我在Android上有以下Kotlin类:

class ThisApplication: Application() {

    lateinit var network: INetwork

    override fun onCreate() {

        super.onCreate()

        network = Network()
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,任何外部类都可以通过简单地执行以下操作来获取INetwork参考:

application.network
Run Code Online (Sandbox Code Playgroud)

但是,这也使外部类可以覆盖该值:

application.network = myNewNetworkReference
Run Code Online (Sandbox Code Playgroud)

我想避免第二种选择.不幸的是,我无法创建该字段,val因为它的初始化需要在onCreate回调中发生.

我还考虑过将字段设为私有并通过函数公开它,如下所示:

private lateinit var network: INetwork
fun getNetwork() = network
Run Code Online (Sandbox Code Playgroud)

但是,无论谁调用getNetwork()仍然可以为其分配一个新值,如下所示:

application.getNetwork() = myNewNetworkReference
Run Code Online (Sandbox Code Playgroud)

如何使网络字段成为外部类的只读?或者甚至更好,val即使我无法在构造函数中初始化它,有没有办法实现它?

field readonly kotlin kotlin-lateinit

10
推荐指数
2
解决办法
3316
查看次数